package fi.helsinki.cs.scheduler3000;

import java.text.ParseException;
import java.text.SimpleDateFormat;

/**
 * @author Team TA's
 */
public class Event {

    private static final String TIME_FORMAT = "HH";
	public static final String[] VALID_START_TIMES = {"08", "10", "12", "14", "16", "18" };
	public static final String[] VALID_END_TIMES = {"10", "12", "14", "16", "18", "20" };
    public static final SimpleDateFormat timeFormat = new SimpleDateFormat(TIME_FORMAT);
    private String startTime;
    private String endTime;
    private String location;
    private String title;

    /**
     * Konstruktori luo Event-olion
     * @param startTime tapahtuman aloitusaika
     * @param endTime tapahtuman lopetusaika
     */
    public Event(String startTime, String endTime) {
        this.setStartTime(startTime);
        this.setEndTime(endTime);
    }

    /**
     * Kuormitettu konstruktori luo Event-olion
     * @param startTime tapahtuman aloitusaika
     * @param endTime tapahtuman lopetusaika
     * @param title tapahtuman nimi
     */
    public Event(String startTime, String endTime, String title) {
        this.setStartTime(startTime);
        this.setEndTime(endTime);
        this.setTitle(title);
    }

    /**
     * Kuormitettu konstruktori luo Event - olion
     * @param startTime tapahtuman aloitusaika
     * @param endTime tapahtuman lopetusaika
     * @param title tapahtuman nimi
     * @param location tapahtumapaikka
     */
    public Event(String startTime, String endTime, String title, String location) {
        this.setStartTime(startTime);
        this.setEndTime(endTime);
        this.setTitle(title);
        this.setLocation(location);
    }

    /**
     * Aksessori palauttaa tapahtumapaikan
     * @return location -attribuutin
     */
    public String getLocation() {
        return location;
    }

    /**
     * Setteri asettaa tai muuttaa tapahtumapaikan
     * @param location asetettava tapahtumapaikka merkkijonona
     */
    public void setLocation(String location) {
        if (location != null) {
            this.location = location;
        }
    }

    /**
     * Aksessori palauttaa tapahtuman aloitusajan
     * @return palauttaa startTime -attribuutin
     */
    public String getStartTime() {
        return startTime;
    }

    /**
     * Setteri asettaa tapahtuman aloitusajan
     * @param startTime asetettava alkuaika merkkijonona
     */
    public void setStartTime(String startTime) {
        try {
            timeFormat.parse(startTime);
            this.startTime = startTime;
        } catch (ParseException pe) {
            throw new IllegalArgumentException("Start time must be one in the following format: " + TIME_FORMAT);
        }
    }

    /**
     * Aksessori palauttaa tapahtuman lopetusajan
     * @return palauttaa endTime attribuutin arvon
     */
    public String getEndTime() {
        return endTime;
    }

    /**
     * Setteri asettaa tapahtuman lopetusajan
     * @param endTime tapahtuman lopetusaika merkkijonona
     */
    public void setEndTime(String endTime) {
        try {
            timeFormat.parse(endTime);
            this.endTime = endTime;
        } catch (ParseException pe) {
            throw new IllegalArgumentException("End time must be one in the following format: " + TIME_FORMAT);
        }
    }

    /**
     *
     * Aksessori palauttaa tapahtuman nimen
     * @return palauttaa title -attribuutin arvon
     */
    public String getTitle() {
        return title;
    }

    /**
     *Setteri asettaa tapahtumalle nimen
     * @param title tapahtuman nimi merkkijonona
     */
    public void setTitle(String title) {
        if (title != null) {
            this.title = title;
        }
    }

    /**
     *
     *
     * @param listOfValids
     * @return
     */
    @Deprecated
    private String getAllValidValues(String[] listOfValids) {
        String valids = "";
        for (String v : listOfValids) {
            valids += "\"" + v + "\", ";
        }
        return valids;
    }

    /**
     * @param value
     * @param allValids - Array of Strings that contains all valid Strings
     * @return true if value is valid, ie.
     * @return false if startTime didn't match a valid start time.
     */
    @Deprecated
    private boolean checkIfValid(String value, String[] allValids) {
        for (String valid : allValids) {
            if (value.equalsIgnoreCase(valid)) {
                return true;
            }
        }
        return false;
    }
}
